From 1ac7d8afca7e4136796e8fccb495b83cfce9e2c8 Mon Sep 17 00:00:00 2001 From: "kaf24@firebug.cl.cam.ac.uk" Date: Wed, 24 May 2006 14:24:57 +0100 Subject: [PATCH] [XENSTORE] Make use of /proc/xen/xsd_{port,kva} private to the Linux implementation. Signed-off-by: John Levon --- tools/xenstore/Makefile | 8 +++- tools/xenstore/xenstored_core.h | 8 ++++ tools/xenstore/xenstored_domain.c | 35 ++++------------ tools/xenstore/xenstored_linux.c | 69 +++++++++++++++++++++++++++++++ tools/xenstore/xenstored_proc.h | 27 ------------ 5 files changed, 91 insertions(+), 56 deletions(-) create mode 100644 tools/xenstore/xenstored_linux.c delete mode 100644 tools/xenstore/xenstored_proc.h diff --git a/tools/xenstore/Makefile b/tools/xenstore/Makefile index 84c08d8626..30b30b3ced 100644 --- a/tools/xenstore/Makefile +++ b/tools/xenstore/Makefile @@ -27,6 +27,12 @@ CLIENTS := xenstore-exists xenstore-list xenstore-read xenstore-rm CLIENTS += xenstore-write CLIENTS_OBJS := $(patsubst xenstore-%,xenstore_%.o,$(CLIENTS)) +XENSTORED_OBJS = xenstored_core.o xenstored_watch.o xenstored_domain.o xenstored_transaction.o xs_lib.o talloc.o utils.o tdb.o hashtable.o + +XENSTORED_Linux = xenstored_linux.o + +XENSTORED_OBJS += $(XENSTORED_$(OS)) + .PHONY: all all: libxenstore.so xenstored $(CLIENTS) xs_tdb_dump xenstore-control xenstore-ls @@ -36,7 +42,7 @@ test_interleaved_transactions: test_interleaved_transactions.o .PHONY: testcode testcode: xs_test xenstored_test xs_random -xenstored: xenstored_core.o xenstored_watch.o xenstored_domain.o xenstored_transaction.o xs_lib.o talloc.o utils.o tdb.o hashtable.o +xenstored: $(XENSTORED_OBJS) $(LINK.o) $^ $(LOADLIBES) $(LDLIBS) -lxenctrl -o $@ $(CLIENTS): xenstore-%: xenstore_%.o libxenstore.so diff --git a/tools/xenstore/xenstored_core.h b/tools/xenstore/xenstored_core.h index 090f54a846..f16d018047 100644 --- a/tools/xenstore/xenstored_core.h +++ b/tools/xenstore/xenstored_core.h @@ -20,6 +20,8 @@ #ifndef _XENSTORED_CORE_H #define _XENSTORED_CORE_H +#include + #include #include #include @@ -163,6 +165,12 @@ void trace(const char *fmt, ...); extern int event_fd; +/* Map the kernel's xenstore page. */ +void *xenbus_map(void); + +/* Return the event channel used by xenbus. */ +evtchn_port_t xenbus_evtchn(void); + #endif /* _XENSTORED_CORE_H */ /* diff --git a/tools/xenstore/xenstored_domain.c b/tools/xenstore/xenstored_domain.c index fa45e5dbde..5bfe0a403f 100644 --- a/tools/xenstore/xenstored_domain.c +++ b/tools/xenstore/xenstored_domain.c @@ -33,12 +33,11 @@ #include "talloc.h" #include "xenstored_core.h" #include "xenstored_domain.h" -#include "xenstored_proc.h" #include "xenstored_watch.h" #include "xenstored_test.h" #include -#include +#include static int *xc_handle; static evtchn_port_t virq_port; @@ -476,44 +475,24 @@ void restore_existing_connections(void) static int dom0_init(void) { - int rc, fd; - evtchn_port_t port; - char str[20]; - struct domain *dom0; + evtchn_port_t port; + struct domain *dom0; - fd = open(XENSTORED_PROC_PORT, O_RDONLY); - if (fd == -1) + port = xenbus_evtchn(); + if (port == -1) return -1; - rc = read(fd, str, sizeof(str)); - if (rc == -1) - goto outfd; - str[rc] = '\0'; - port = strtoul(str, NULL, 0); - - close(fd); - dom0 = new_domain(NULL, 0, port); - fd = open(XENSTORED_PROC_KVA, O_RDWR); - if (fd == -1) + dom0->interface = xenbus_map(); + if (dom0->interface == NULL) return -1; - dom0->interface = mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, - MAP_SHARED, fd, 0); - if (dom0->interface == MAP_FAILED) - goto outfd; - - close(fd); - talloc_steal(dom0->conn, dom0); evtchn_notify(dom0->port); return 0; -outfd: - close(fd); - return -1; } diff --git a/tools/xenstore/xenstored_linux.c b/tools/xenstore/xenstored_linux.c new file mode 100644 index 0000000000..dabc5ff1a4 --- /dev/null +++ b/tools/xenstore/xenstored_linux.c @@ -0,0 +1,69 @@ +/****************************************************************************** + * + * Copyright 2006 Sun Microsystems, Inc. All rights reserved. + * Use is subject to license terms. + * + * Copyright (C) 2005 Rusty Russell IBM Corporation + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation, version 2 of the + * License. + */ + +#include +#include +#include +#include + +#include "xenstored_core.h" + +#define XENSTORED_PROC_KVA "/proc/xen/xsd_kva" +#define XENSTORED_PROC_PORT "/proc/xen/xsd_port" + +evtchn_port_t xenbus_evtchn(void) +{ + int fd; + int rc; + evtchn_port_t port; + char str[20]; + + fd = open(XENSTORED_PROC_PORT, O_RDONLY); + if (fd == -1) + return -1; + + rc = read(fd, str, sizeof(str)); + if (rc == -1) + { + int err = errno; + close(fd); + errno = err; + return -1; + } + + str[rc] = '\0'; + port = strtoul(str, NULL, 0); + + close(fd); + return port; +} + +void *xenbus_map(void) +{ + int fd; + void *addr; + + fd = open(XENSTORED_PROC_KVA, O_RDWR); + if (fd == -1) + return NULL; + + addr = mmap(NULL, getpagesize(), PROT_READ|PROT_WRITE, + MAP_SHARED, fd, 0); + + if (addr == MAP_FAILED) + addr = NULL; + + close(fd); + + return addr; +} diff --git a/tools/xenstore/xenstored_proc.h b/tools/xenstore/xenstored_proc.h deleted file mode 100644 index 509ab658fd..0000000000 --- a/tools/xenstore/xenstored_proc.h +++ /dev/null @@ -1,27 +0,0 @@ -/* - Copyright (C) 2005 XenSource Ltd - - This program is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software - Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - -*/ - -#ifndef _XENSTORED_PROC_H -#define _XENSTORED_PROC_H - -#define XENSTORED_PROC_KVA "/proc/xen/xsd_kva" -#define XENSTORED_PROC_PORT "/proc/xen/xsd_port" - - -#endif /* _XENSTORED_PROC_H */ -- 2.30.2